← Back shared

본문 바로가기

블로그

카테고리 이동

지금까지 오디오 데이터를 꽤나 많이 가지고 논 것 같은데, 아직 이걸 그대로 학습에 투입시킬 수 없다.

Raw data를 그대로 학습에 투입시키면, 오버피팅 이 생길 가능성이 높기 때문이다.

그래서 일단 먼저 Augmentation(증폭) 과정을 거쳐서 오버피팅 방지를 위한 오디오 데이터 전처리 가 필요하다.

그렇게 전처리가 된 오디오 데이터는 Feature(특징) 추출 을 위해 MFCC Mel Spectrogram 처리를 한다.

컴퓨터가 알아들을 수 있도록 데이터의 형태를 바꾸는 것이다.

그렇게 처리를 하면 학습을 시작할 준비가 된 것이다.

오디오 데이터 증폭 - Audio Data Augmentation

갓...librosa

오디오 데이터 Augmentation 이라던가, 다음 챕터에서 설명할 MFCC, Mel Spectrogram

모두 다 librosa 라이브러리 기반으로 구현이 가능하다.

(쉽게 만들어주셔서 가...감사합니다.)

오디오 데이터에 Augmentation 을 하는 이유는 기본적으로 '데이터 증강 '을 위해서다.

거기에 부수적으로 오버피팅을 방지 하기 위한 목적도 있다.

오디오 데이터 Augmentation 기법 에는 noise, stretch, shift, pitch, reverse, minus 가 있고

그중에서 약간의 잡음을 넣는 noise, 소리를 길게 늘어지게 하는 stretch,

소리의 순서를 바꾸는 shift 와 파형의 높음의 정도를 깎아내리는 pitch 를 사용했다.

Audio Data Augmentation (noise, stretch, shift, pitch)

MFCC, Mel Spectrogram

이 오디오 데이터를 컴퓨터가 그대로 인식하기는 어렵다.

그래서 시간, 주파수, 세기 이 3가지 요소로 오디오를 표현하는 디지털 방식으로 바꾸어야만 한다.

그 방법으로는 MFCC(Mel Frequency Cepstrm Coefficient) Mel Spectrogram 이 있다.

MFCC 각 주파수마다 다른 weight를 가진 필터를 통해 음고를 계산하는 방식 이다. 주파수가 커질수록 y축 변화가 별로 없다.

MFCC 처리 과정으로는 5가지 절차가 있다.

MFCC 과정 (출처: https://ratsgo.github.io/speechbook/docs/fe/mfcc)

① 고주파 쪽 강조(Pre-Emphasis)

※ 왜 강조? 사람의 목소리가 실제로 입 밖으로 나올 때 고주파 영역이 많이 감소되어 나온다고

② 25~35ms 길이의 frame으로 나누기 (일정부분은 겹치도록) + 경계를 Smooth하게 (Framing + Windowing)

※ 왜 fram으로 나눔? 발음 인식을 위해 오디오를 같은 길이로 자름. 오디오 간 길이가 다르면 그것이 또 새로운 정보로 인식되어버릴 수 있음

※ 왜 20 ~ 40ms? 20 ~ 40ms 내에서는 현재 내고 있는 발음이 바뀌지 않는다라는 연구결과를 적용함

※ 왜 겹치게? frame 간 연속되지 않으면 갑자기 변화율이 무한대가 되어버릴 수 있다.

③ frame 각각마다 푸리에 변환 실시, 주파수 정보 추출 → 스펙트럼 생성 (DFT)

④ 특정 주파수에 집중하게 하는 Mel Filter Bank 적용 → Mel Spectrum 생성 (사람의 말소리 인식에 민감한 주파수에 더 집중)

※ Mel Filter Bank: 각 주파수마다 다른 filter를 가지고 있어서 주파수가 다른 영역을 쉽게 구분하여 처리할 수 있다.

⑤ Mel Spectrum에 로그 취하고 역푸리에 변환 적용

결과: 주파수 도메인 정보를 새로운 시간 도메인으로 바꾸었으며, 중요한 특징이 추출이 된다.

연구마다 다르긴 한데 Mel Spectrogram 만 사용하기도 하고, MFCC 를 사용하기도 한다고 한다.

MFCC 주파수마다 de-correlate 하기 때문에(주파수간의 상관관계가 낮기 때문에) 일반적인 상황에서 좋은 성능 을 보이고,

Mel Spectrogram 주파수마다 correlate 하기 때문에 도메인이 한정적인 경우에 좋은 성능 을 보인다고 한다.

Mel Spectrogram과 MFCC (출처: https://librosa.org/doc/main/generated/librosa.feature.mfcc.html)

MFCC, Mel Spectrogram 구현

MFCCMel Spectrogram 은 그 이론적 배경이 어려운데 비해

librosa 패키지 와 함께라면 구현에는 어려움이 전혀 없다.

MFCC librosa.feature.mfcc

Mel Spectrogram librosa.feature.melspectrogram

딱 이 둘이면 끝! (물론 파라미터 조절 매우 중요하고~)

Librosa MFCC Mel Spectrogram

MFCC 면 어떠하고, Mel Spectrogram 이면 어떠하리

그냥 두 개 다 쓰면 되는 걸 ㅎㅎㅎ

hstack으로 쌓는 코드, 그대로 유지했다.

이쯤 전처리하면 되었다. 이제 학습하러 가자~!

Audio Data Augmentation, MFCC, Mel Spectrogram 관련 매우 도움되는 글[[Python] 소리 데이터 (Audio Data)Augmentation

소리 데이터 augmentation에 다양한 방법에 대해 알아보겠습니다. 먼저 말씀드리자면, 이 코드는 2020년 1월에 했던 빅데이터분석연합동아리 투빅스 컨퍼런스에 했던 코드들입니다. 이때 했던 프로젝트는 Singing Voice Conversion으로 기회가 되면 Cycle GAN내용과 함께 나중에 포스팅 하겠습니다. 이미지 같은 경우는 noise, 회전, 압축 등 다양한 augmentation 방법이 있고 설명도 많은데, 소리 같은 경우는 코드나 방법에 관한 내용이 별로 없습니다. 그래서 제가 알고 있고 사용했던 총 5가지 방...

data-engineer.tistory.com

](https://data-engineer.tistory.com/31)[MFCCs

articles about speech recognition

ratsgo.github.io

](https://ratsgo.github.io/speechbook/docs/fe/mfcc)